package com.poc.importacao.bacias;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.poc.importacao.baseabstract.AbstractManager;
import com.poc.importacao.baseabstract.BaciaManagerAbstract;
import com.poc.log.Log;


public class BaciaContemRioManager extends BaciaManagerAbstract {

	public static final Integer COD_TIPO_RELACIONAMENTO_BACIA_RIO = 51;
	
	public static final String SELECT_RIOS_RELACIONADOS_JOIN_LINHA = "select r.codlugar from lugar r, multiarea a, linha n where ST_INTERSECTS(a.geom, n.geom) and a.codlugar = %s and r.codtipolugar = %s and r.codlugar = n.codlugar	and a.codlugar <> n.codlugar";
	public static final String SELECT_RIOS_RELACIONADOS_JOIN_MULTILINHA = "select r.codlugar from lugar r, multiarea a, multilinha n where ST_INTERSECTS(a.geom, n.geom) and a.codlugar = %s and r.codtipolugar = %s and r.codlugar = n.codlugar and a.codlugar <> n.codlugar";
	
	
	@Override
	protected ResultSet getRelacionados(String codLugarBaciaPrincipal)  throws SQLException {
		String query = String.format(BaciaContemRioManager.SELECT_RIOS_RELACIONADOS_JOIN_LINHA, codLugarBaciaPrincipal, BaciaContemRioManager.COD_TIPO_LUGAR_RIO);
		return BaciaContemBaciaManager.getDatabaseManager().execute(query);
	}

	protected ResultSet getRelacionadosMultiLinha(String codLugarBaciaPrincipal)  throws SQLException {
		String query = String.format(BaciaContemRioManager.SELECT_RIOS_RELACIONADOS_JOIN_MULTILINHA, codLugarBaciaPrincipal, BaciaContemRioManager.COD_TIPO_LUGAR_RIO);
		return BaciaContemBaciaManager.getDatabaseManager().execute(query);
	}
	
	@Override
	public void createInserts(String fileName) throws SQLException, IOException {
		ResultSet codLugarBacias = this.getTodasBacias();
		ResultSet riosRelacionados = null;
		
		String codLugarBacia;
	
		Double count = 0.0;
		Log inserts = new Log(fileName);
		inserts.append("INSERT INTO RELACIONAMENTO_GEO (codlugar1, codlugar2, codtiporelgeo, datacriacao) VALUES \n");
		
		while(codLugarBacias.next()){
			codLugarBacia = codLugarBacias.getString(1);
		
			riosRelacionados = this.getRelacionados(codLugarBacia);
			while(riosRelacionados.next()) {
				inserts.append((String.format(AbstractManager.INSERT_RELACIONAMENTO_PARAMS, riosRelacionados.getString(1), codLugarBacia, BaciaContemRioManager.COD_TIPO_RELACIONAMENTO_BACIA_RIO)));					
			}
			
			riosRelacionados = this.getRelacionadosMultiLinha(codLugarBacia);
			while(riosRelacionados.next()) {
				inserts.append((String.format(AbstractManager.INSERT_RELACIONAMENTO_PARAMS, riosRelacionados.getString(1), codLugarBacia, BaciaContemRioManager.COD_TIPO_RELACIONAMENTO_BACIA_RIO)));					
			}
			
			//System.out.print((count/AbstractManager.BACIA_COUNT * 100.) + "%\r");
			count++;
		}
		//System.out.print("Done!\r");
		inserts.close();
		this.finalize();

	}

	/**
	 * @param args
	 * @throws IOException 
	 * @throws SQLException 
	 */
	public static void main(String[] args) throws SQLException, IOException {

		BaciaContemRioManager baciaContemRio = new BaciaContemRioManager();
		
		baciaContemRio.createInserts("bacia_rio_inserts.sql");

	}

}
